package jp.oesf.xmldomsample;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import jp.oesf.xmldomsample.model.RowModel;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class XmlSample extends Activity {
	private static final String TAG = "XmlSample";
	private TextView textResult;
	private String xml;
	private XmlHelper xmlHelper;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.textResult = (TextView) findViewById(R.id.text_result);
		this.xmlHelper = XmlHelper.getInstance();
		getXmlData();
	}

	public void onClickClearButton(View v) {
		this.textResult.setText("");
	}

	public void onClickDOMButton(View v) {
		RowModel rowModel = null;
		// TODO 【DOM】 No.08 XmlHelper#parseDomの呼び出しRowModelを取得する
		rowModel = this.xmlHelper.parseDom(this, this.xml);
		
		if( rowModel == null){
			this.textResult.setText("データを取得できませんでした。");
		}else{
			// TODO 【DOM】 No.09 TextViewにrowModelの内容を表示する
			this.textResult.setText(rowModel.toString());
		}
	}

	public void onClickSAXButton(View v) {
		RowModel rowModel = null;
		// TODO 【SAX】 No.08 XmlHelper#parseSaxの呼び出しRowModelを取得する
		rowModel = this.xmlHelper.parseSax(this, this.xml);
		
		if( rowModel == null){
			this.textResult.setText("データを取得できませんでした。");
		}else{
			// TODO 【SAX】 No.09 TextViewにrowModelの内容を表示する
			this.textResult.setText(rowModel.toString());
		}
	}

	public void onClickXMLPullparserButton(View v) {
		RowModel rowModel = null;
		// TODO 【XMLPullParser】 No.06 XmlHelper#parseXmlPullparserの呼び出しRowModelを取得する
		rowModel = this.xmlHelper.parseXmlPullparser(this, this.xml);
		if( rowModel == null){
			this.textResult.setText("データを取得できませんでした。");
		}else{
			// TODO 【XMLPullParser】 No.07 TextViewにrowModelの内容を表示する
			this.textResult.setText(rowModel.toString());
		}

	}

	/**
	 * assetsフォルダからsample.xmlファイルを読み込む
	 */
	private void getXmlData() {
		BufferedReader br = null;
		try {
			InputStream in = getAssets().open("sample.xml");
			br = new BufferedReader(new InputStreamReader(in));
			StringBuilder sb = new StringBuilder();
			String line;
			while ((line = br.readLine()) != null) {
				Log.v("readFile", line);
				sb.append(line);
			}
			this.xml = sb.toString();

		} catch (Exception e) {
			Log.e(TAG, Log.getStackTraceString(e));
		} finally {
			try {
				if (br != null) {
					br.close();
				}
			} catch (IOException e) {
				Log.e(TAG, Log.getStackTraceString(e));
			}
		}
	}
}